home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / COMMUNIC / H191.ZIP / CA29-4.EXE / CACMP.DOC next >
Text File  |  1992-11-30  |  21KB  |  880 lines

  1. COM-AND Script Utility
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.           ---------------------------------------
  13.                COM-AND Script Utility
  14.           Script utility for the COM-AND language
  15.           ---------------------------------------
  16.  
  17.  
  18.  
  19.  
  20.     CACMP ver.1.2 and COM-AND are copyright by 1992 CABER Software.
  21.     CACMP and COM-AND are distributed freely and may be copied by
  22.     anyone for any number of machines, for purposes of evaluation.
  23.     The author offers COM-AND and its accessory programs together
  24.     as "shareware".  If you USE the program you MUST pay for it.
  25.  
  26.  
  27.  
  28.     The complete user license and registration information is to be
  29.     found in the file REGISTER.DOC.  Limitations on redistribution
  30.     of COM-AND are set out in the file VENDOR.DOC.    These two files
  31.     are included with the COM-AND program release.
  32.  
  33.  
  34.  
  35.                  CABER Software
  36.                  R. (Scott) McGinnis
  37.                  P.O. Box 3607 Mdse Mart
  38.                  Chicago, IL 60654-0607
  39.  
  40.                  GEnie, Delphi: TARTAN
  41.                  CIS .......... 73147,2665
  42.                  Internet ..... 73147.2665@compuserve.com
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54. Version 1.2: 921012
  55.  
  56. COM-AND Script Utility
  57.  
  58.  
  59.                  Table of Contents
  60.                  -----------------
  61.  
  62. I.    Introduction  .............................................. page 1
  63.  
  64. II.    Running CACMP  ............................................. page 2
  65.  
  66. III.    CACMP functions ............................................ page 4
  67.  
  68.     A. Syntax check ............................................ page 4
  69.     B. Semantic check .......................................... page 5
  70.     C. Partial strip ........................................... page 9
  71.     D. Full strip .............................................. page 10
  72.     E. Preprocessing ........................................... page 11
  73.  
  74.  
  75. IV.    CACMP and COM-AND .......................................... page 12
  76.  
  77. V.    Program Requirements ....................................... page 13
  78.  
  79. VI.    Program and Author Information    ............................ page 14
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109. Version 1.2: 921012
  110.  
  111. COM-AND Script Utility                           Page   1
  112.  
  113.  
  114. I.    Introduction
  115.  
  116.  
  117.     A. What is COM-AND?
  118.  
  119.        COM-AND for the IBM PC and compatibles is a communications pro-
  120.        gram for use by itself, or with several integrated accessory
  121.        programs (which themselves may be used independently of COM-AND).
  122.        COM-AND provides standard comm program functions:  a dialing
  123.        directory, macros, disk logging, binary and ASCII file transfers,
  124.        ... and scripted execution.
  125.  
  126.  
  127.     B. COM-AND scripts
  128.  
  129.        A script automates certain manual tasks, and allows COM-AND to
  130.        run unattended (if the script has been tested (!!!)).  A script
  131.        is a program written to control COM-AND execution.  Scripts
  132.        distributed with COM-AND include:  LEARN mode (a script that
  133.        writes a script), a FILEMGR (perform DOS functions and find
  134.        files for transmission), a BBS, a HOST mode, and many more.
  135.  
  136.  
  137.        Script commands are read by COM-AND from an ASCII file (word
  138.        processor files are not usually ASCII files (!)).  COM-AND's
  139.        internal editor (Alt-Q), programmer's text editors and EDLIN
  140.        (included with DOS) may be used to create and modify a script
  141.        file.
  142.  
  143.  
  144.  
  145.     C. The CACMP program
  146.  
  147.        CACMP is a diagnostic and preprocessor for COM-AND scripts.
  148.        CACMP may be used simply to perform syntax and semantic review
  149.        of a COM-AND script, or it may be used to preprocess scripts
  150.        for COM-AND.
  151.  
  152.  
  153.        This document discusses the use of CACMP.EXE.  COM-AND scripts
  154.        and the script language are discussed in the CASCRIPT.DOC
  155.        document, distributed with COM-AND.
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164. Version 1.2: 921012
  165.  
  166. COM-AND Script Utility                           Page   2
  167.  
  168.  
  169. II.    Running CACMP
  170.  
  171.  
  172.     Generally, CACMP is invoked at the DOS prompt with the command:
  173.  
  174.     -----------------------------------------------------------------
  175.     "d>" CACMP <options> [<infilename> [<outfilename>]]
  176.  
  177.     Where "d>" is the DOS prompt, and
  178.           <options> are [<switch> [<switch> ...]]
  179.     -----------------------------------------------------------------
  180.  
  181.  
  182.     CACMP could be invoked with a command such as:
  183.  
  184.         "d>" CACMP
  185.  
  186.     to simply start CACMP.    In this case, CACMP prompts for an input
  187.     file and does not write a stripped/preprocessed file.  The command:
  188.  
  189.         "d>" CACMP /s
  190.  
  191.     causes CACMP to prompt for both an input AND an output file name
  192.     (the input file MUST NOT be the same as the output file).  Output
  193.     is the input stripped of comments (see below).
  194.  
  195.  
  196.     CACMP by default deletes an output file (if there is one) when a
  197.     syntax error is found.    This action may be inhibited with the switch
  198.     "/k".  In the case:
  199.  
  200.         "d>" CACMP /s/k
  201.  
  202.     the output file is retained (and lines marked as 'syntax errors'
  203.     are retained (partially stripped, regardless of preprocessing).
  204.  
  205.  
  206.     The input file name (and output file name) may be specified in the
  207.     run command.  For example:
  208.  
  209.         "d>" CACMP /s bbs.src
  210.  
  211.     reads the file BBS.SRC and prompts for an output file name.  Input
  212.     file names default to the extension ".CMD" if the name given is not
  213.     found.    The output file, if it exists, is deleted and recreated when
  214.     CACMP begins.  For this reason, CACMP must not be run with the same
  215.     file as INPUT and output.
  216.  
  217.  
  218.  
  219. Version 1.2: 921012
  220.  
  221. COM-AND Script Utility                           Page   3
  222.  
  223.  
  224. II.    Running CACMP (continued)
  225.  
  226.  
  227.     The following switches are defined for CACMP at run-time:
  228.  
  229.         /1        Partial strip output (see below)
  230.         /s        Full strip output (see below)
  231.         /k        Keep output when syntax error is detected
  232.         /p        Preprocess script (for speed)
  233.  
  234.  
  235.     The default settings for CACMP are: no output, and delete output if
  236.     a syntax error is detected.
  237.  
  238.  
  239.     All error and diagnostic output by CACMP is directed to the standard
  240.     output device.    Therefore, the command:
  241.  
  242.         "d>" CACMP >temp script.cmd
  243.  
  244.     records all the diagnostic information in the file TEMP on the cur-
  245.     rent subdirectory, for later review.
  246.  
  247.  
  248.     When CACMP terminates it displays the following summary:
  249.  
  250.         Total input lines:
  251.         Total input statements:
  252.         Total input comments:
  253.         Total input labels:
  254.         Total syntax errors:
  255.         Total semantic warnings:
  256.  
  257.  
  258.     If CACMP created an output file, CACMP also reports:
  259.  
  260.         Input file size:
  261.         Output file size:
  262.  
  263.  
  264.     CACMP terminates with a DOS error level of 0 if no syntax errors and
  265.     no semantic errors are detected.  CACMP terminates with a DOS error
  266.     level of 1 if either syntax or semantic errors are reported.  [Batch
  267.     checks of a group of scripts may be stopped on an error using the
  268.     error level returned to DOS.]
  269.  
  270.  
  271.  
  272.  
  273.  
  274. Version 1.2: 921012
  275.  
  276. COM-AND Script Utility                           Page   4
  277.  
  278.  
  279. III.    CACMP functions
  280.  
  281.  
  282.     A. Syntax check
  283.  
  284.  
  285.        CACMP's first function is to syntactically verify each line of
  286.        the input file.  Syntax errors are noted as follows:
  287.  
  288.               Line     3: Syntax error
  289.                S0 = N0+5(N1+ N2)
  290.                     ^
  291.               General parse failure (syntax)
  292.  
  293.  
  294.        The first line records the line number and the error.  The second
  295.        line echoes the input line.    The third line points to the highest
  296.        point the parser reached parsing the line (probably close to the
  297.        point at which the error occurs).  The fourth line adds any addi-
  298.        tional information returned by the parser.
  299.  
  300.  
  301.        Developer's note:  In the fourth line, ANY return except the one
  302.        above should be reported to the author.  The fourth line properly
  303.        may be considered diagnostic to CACMP.  For example, 'Stack
  304.        overflow' at this point indicates that the parser recursed beyond
  305.        its stack - a CACMP problem and not an input problem.
  306.  
  307.  
  308.        All error and diagnostic information listed by CACMP is directed
  309.        to the standard output device.  Therefore, the command:
  310.  
  311.            "d>" CACMP >temp script.cmd
  312.  
  313.        records all CACMP diagnostic information in the file TEMP on the
  314.        current subdirectory, for later review.
  315.  
  316.  
  317.        Syntax errors are counted, and the number reported at CACMP ter-
  318.        mination.  If CACMP is used to strip/preprocess a file and syntax
  319.        errors are detected, the output file is deleted (unless /k in
  320.        the run command is specified).
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329. Version 1.2: 921012
  330.  
  331. COM-AND Script Utility                           Page   5
  332.  
  333.  
  334. III.    CACMP functions (continued)
  335.  
  336.  
  337.     B. Semantic check
  338.  
  339.  
  340.        Beyond syntactic verification of each line, CACMP follows the
  341.        input file to verify the structure of the script.  Semantic
  342.        verification in CACMP consists of:
  343.  
  344.        1.    Overlapped domains
  345.  
  346.  
  347.         The IF, SWITCH, WHILE, FOR and DO statements imply a 'domain'
  348.         of execution.  The domain of the IF statement extends until
  349.         an ENDIF statement (except in compound IF statements, where
  350.         a single statement to be executed (when the condition is
  351.         true) is carried on the same line).  The domain of a SWITCH
  352.         statement extends until an ENDSWITCH.  Similarly the WHILE,
  353.         FOR and DO statements domains extend until their respective
  354.         terminators.
  355.  
  356.         Domains may NOT overlap.  For example, the following
  357.         construction is an overlapped domain:
  358.  
  359.             WHILE N0 LT 5
  360.                   IF N0 EQ 3
  361.                  ENDWHILE
  362.                  GOTO somewhere
  363.                   ENDIF
  364.                   ENDWHILE
  365.  
  366.         [In the above case, the ENDWHILE within the IF domain is
  367.         superfluous (the WHILE loop domain would terminate on the
  368.         GOTO).]  CACMP diagnoses this code as:
  369.  
  370.             Line     3: WARNING: Overlapped domain
  371.                              ENDWHILE
  372.             ^
  373.             .......  Current domain is IF starting:     2
  374.  
  375.         The ENDWHILE on line 3 overlaps the IF domain that began
  376.         in line 2.
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384. Version 1.2: 921012
  385.  
  386. COM-AND Script Utility                           Page   6
  387.  
  388.  
  389. III.    CACMP functions (continued)
  390.  
  391.  
  392.     B. Semantic check (continued)
  393.  
  394.  
  395.        2.    Incomplete domain
  396.  
  397.  
  398.         On completion of processing, domains left open (i.e. with-
  399.         out closure) are reported as 'incomplete domains' by CACMP.
  400.         For example:
  401.  
  402.             WARNING: Incomplete WHILE domain starting:     1
  403.  
  404.         In this case, a WHILE loop was not properly closed with an
  405.         ENDWHILE.  The WHILE statement is in line 1.
  406.  
  407.  
  408.        3.    Unreachable code
  409.  
  410.  
  411.         The GOTO, RETURN, FRETURN, ACCESSORY, EXECUTE, EXIT, BYE,
  412.         TERMINAL, CONNECT, and QUIT statements are unconditional
  413.         transfers of control.  They do not return.  When one of
  414.         these statements is found OUTSIDE of the domain of an IF,
  415.         WHILE, SWITCH, FOR, or DO statement, CACMP expects to find
  416.         a label as the next executable statement.  If not, CACMP
  417.         issues the following semantic warning:
  418.  
  419.             Line     2: WARNING: Cannot reach this statement
  420.             N0 = N0+1
  421.             ^
  422.  
  423.        4.    Duplicate labels
  424.  
  425.  
  426.         CACMP keeps track of label statements.    When a label dupli-
  427.         cates one previously seen, CACMP issues the warning:
  428.  
  429.             Line     9: WARNING: Duplicate label
  430.             label:
  431.             ^
  432.  
  433.         Note that the label has been truncated to 8 characters.
  434.         COM-AND only uses the first 8 characters of a label.  Dupli-
  435.         cation of the first 8 characters is often the root of a
  436.         duplicate label condition.
  437.  
  438.  
  439. Version 1.2: 921012
  440.  
  441. COM-AND Script Utility                           Page   7
  442.  
  443.  
  444. III.    CACMP functions (continued)
  445.  
  446.  
  447.     B. Semantic check (continued)
  448.  
  449.  
  450.        5.    Undefined labels
  451.  
  452.  
  453.         CACMP also keeps track of label used in GOTO, GOSUB, ON and
  454.         WOPEN statements.  On completion of processing, any label
  455.         referenced by one of these statements but not found in the
  456.         script is reported as 'undefined label'.  For example:
  457.  
  458.             WARNING: Undefined label: SOMEWHER
  459.  
  460.  
  461.        6.    Label in domain    (IF/SWITCH/WHILE/FOR/DO)
  462.  
  463.  
  464.         Above, it is noted that a GOTO terminates the 'domain' of
  465.         an IF, SWITCH, WHILE, FOR, and DO statement.  GOTOs may NOT
  466.         transfer control INTO the domain of one of these statements.
  467.         When a label is encountered within a domain, CACMP reports:
  468.  
  469.             Line   8: WARNING: Label in WHILE domain starting:  3
  470.             label:
  471.             ^
  472.  
  473.         It will be noted (painfully), that a single unclosed domain
  474.         (for example, an IF missing its ENDIF) results in MANY
  475.         'label in domain' warnings.  The clue in this case is that
  476.         all errors reference a domain beginning on the same line.
  477.         Correct the unclosed domain, and improper 'label in domain'
  478.         warnings will disappear.
  479.  
  480.  
  481.  
  482.  
  483.  
  484.  
  485.  
  486.  
  487.  
  488.  
  489.  
  490.  
  491.  
  492.  
  493.  
  494. Version 1.2: 921012
  495.  
  496. COM-AND Script Utility                           Page   8
  497.  
  498.  
  499. III.    CACMP functions (continued)
  500.  
  501.  
  502.     B. Semantic check (continued)
  503.  
  504.  
  505.        7.    COM-AND stack overflow
  506.  
  507.  
  508.         COM-AND allows IF, WHILE, SWITCH, FOR and DO statements to
  509.         be nested to a depth of 20.  When CACMP finds a nesting
  510.         level greater than 20 it issues a warning:
  511.  
  512.             WARNING: DO/FOR/IF/SWITCH/WHILE stack overflow
  513.                  WHILE 1 EQ 1
  514.             ^
  515.  
  516.  
  517.        8.    COM-AND stack underflow
  518.  
  519.  
  520.         When an ENDIF, ENDWHILE, ENDSWITCH, ENDFOR or UNTIL statement
  521.         is encountered with no corresponding start-of-domain state-
  522.         ment, CACMP issues the warning:
  523.  
  524.             WARNING: DO/FOR/IF/SWITCH/WHILE stack underflow
  525.                  ENDWHILE
  526.             ^
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534.  
  535.  
  536.  
  537.  
  538.  
  539.  
  540.  
  541.  
  542.  
  543.  
  544.  
  545.  
  546.  
  547.  
  548.  
  549. Version 1.2: 921012
  550.  
  551. COM-AND Script Utility                           Page   9
  552.  
  553.  
  554. III.    CACMP functions (continued)
  555.  
  556.  
  557.     C. Partial strip
  558.  
  559.  
  560.        When CACMP is run with the /1 switch, records of the input file
  561.        are 'partially stripped' and written to the output file.  Partial
  562.        stripping is similar in function to the STRIPPER.CMD script once
  563.        distributed with COM-AND.  Partial stripping consists of:
  564.  
  565.         1) Removal of comment lines
  566.         2) Removal of comments on statement lines
  567.         3) Removal of all blanks to the left of a statement
  568.         4) Reduction of multiple blanks to a single blank
  569.         5) Removal of redundant blanks (e.g. " = " -> "=")
  570.  
  571.  
  572.        The STRIPPER.CMD script only performs function (1) above.  Addi-
  573.        tionally, CACMP writes the output file records with only a car-
  574.        riage return (not carriage return/line feed), as COM-AND needs
  575.        only the carriage return.
  576.  
  577.  
  578.        A file 'partially stripped' by CACMP is smaller than one stripped
  579.        by STRIPPER.  The actual reduction in size is determined by the
  580.        input file, but CACMP necessarily produces a smaller file.
  581.  
  582.  
  583.        Please note that once stripped by CACMP, a file may not be 'read-
  584.        able' by the same editor that produced its source.  Some editors
  585.        tolerate the missing line feed, and some don't.  The popular LIST
  586.        program by Vern Buerg, for example, won't display the file
  587.        (except as a hex dump).
  588.  
  589.  
  590.        Lines marked as 'syntax errors' are written to the output file
  591.        partially stripped.
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.  
  601.  
  602.  
  603.  
  604. Version 1.2: 921012
  605.  
  606. COM-AND Script Utility                           Page  10
  607.  
  608.  
  609. III.    CACMP functions (continued)
  610.  
  611.  
  612.     D. Full Strip
  613.  
  614.  
  615.        When CACMP is run with the /s switch, records of the input file
  616.        are 'fully stripped' and written to the output file.  Full
  617.        stripping includes the functions listed above as 'partial
  618.        stripping', and:
  619.  
  620.         1) Reduction of label lines to an 8 character maximum
  621.         2) Reduction of labels in GOTO, GOSUB, ON and WOPEN
  622.            statements to an 8 character maximum
  623.         3) Reduction of initial keywords in statements to a four
  624.            character maximum.
  625.  
  626.  
  627.        Again, CACMP writes the output file records with only a carriage
  628.        return (not carriage return/line feed) as COM-AND needs only the
  629.        carriage return.
  630.  
  631.  
  632.        A file 'fully stripped' by CACMP is considerably smaller than one
  633.        stripped by STRIPPER.  The actual reduction in size is determined
  634.        by the input file.  [Your mileage may vary; contents are shipped
  635.        by weight, not volume...]
  636.  
  637.  
  638.        Lines marked 'syntax errors' are written to the output file, but
  639.        only partially stripped.
  640.  
  641.  
  642.        [Tricky ones in the audience might propose that labels be con-
  643.        verted to numeric equivalents.  After all, "1:" is a legitimate
  644.        label.  However, the COM-AND language supports indirect GOTOs.
  645.        For example, "GOTO S0" branches to the label in S0 (given that
  646.        S0 contains a valid label name).  Therefore, such a reduction,
  647.        although generally possible, is not supported.]
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659. Version 1.2: 921012
  660.  
  661. COM-AND Script Utility                           Page  11
  662.  
  663.  
  664. III.    CACMP functions (continued)
  665.  
  666.  
  667.     E. Preprocessing
  668.  
  669.  
  670.        When CACMP is run with the /P switch, records of the input file
  671.        are 'preprocessed' and written to the output file.  Preprocessing
  672.        performs the full strip as described above, and:
  673.  
  674.         .  adds a two byte keyword to each executable line to
  675.            speed COM-AND's execution of the statement
  676.  
  677.  
  678.        Preprocessed scripts are accepted by COM-AND as of its version
  679.        2.7.  The two-byte code added to each executable line speeds the
  680.        interpretor's execution of the statement.  [Author's note: the
  681.        two byte keyword may easily be recognized - the first byte is
  682.        always negative (larger than 127).]
  683.  
  684.  
  685.        A file 'preprocessed' by CACMP is larger than one stripped by
  686.        CACMP.  It executes approximately 30% faster than the same script
  687.        stripped by CACMP.  [Please note, preprocessing does not have any
  688.        effect on writes to screen or disc.    It simply speeds the
  689.        interpretation of script statements.]
  690.  
  691.  
  692.        Lines marked 'syntax errors' are written to the output file, but
  693.        only partially stripped.  They are not preprocessed.
  694.  
  695.  
  696.  
  697.  
  698.  
  699.  
  700.  
  701.  
  702.  
  703.  
  704.  
  705.  
  706.  
  707.  
  708.  
  709.  
  710.  
  711.  
  712.  
  713.  
  714. Version 1.2: 921012
  715.  
  716. COM-AND Script Utility                           Page  12
  717.  
  718.  
  719. IV.    CACMP and COM-AND
  720.  
  721.  
  722.     CACMP implements a parser based upon a meta-language specification
  723.     of the COM-AND language.  COM-AND does not; its interpretor parses
  724.     ad hoc (or if you wish, on-the-fly).  The advantages of ad hoc
  725.     interpretation are:
  726.  
  727.         1) execution speed, and
  728.         2) simplicity of extension
  729.  
  730.  
  731.     The disadvantage of ad hoc interpretation is that a syntax/semantic
  732.     utility such as CACMP is not possible (not based on the interpretor's
  733.     code, at least).
  734.  
  735.  
  736.     The important point is that CACMP may kick out perfectly valid
  737.     statements because its meta-language statement of the language does
  738.     not accommodate a particular construction.  COM-AND executes the
  739.     statement happily, but CACMP rejects it.
  740.  
  741.  
  742.     The language syntax implemented is taken from version 2.8 COM-AND
  743.     documentation...  however, COM-AND proper (not its documentation)
  744.     is the final arbiter of syntax (and documentation is adjusted
  745.     accordingly <smile>).
  746.  
  747.  
  748.     If you use this, please save doubtful reports and submit them to
  749.     the developer.    Such reports are used to further refine CACMP.
  750.  
  751.  
  752.     For the curious, the meta-language implemented here is similar in
  753.     form to the LANGPACK language developed at Bell Labs.  LANGPACK per
  754.     se was not implemented - a modified Backus-Naur form for the meta-
  755.     language was implemented in a lexical compiler created for CACMP.
  756.     The parser CACMP implements uses the lexical compiler's output to
  757.     control text parsing.
  758.  
  759.  
  760.  
  761.  
  762.  
  763.  
  764.  
  765.  
  766.  
  767.  
  768.  
  769. Version 1.2: 921012
  770.  
  771. COM-AND Script Utility                           Page  13
  772.  
  773.  
  774. V.    Program requirements
  775.  
  776.  
  777.     CACMP is written for an IBM PC or DOS compatible machine.  CACMP
  778.     uses DOS and BIOS for all I/O...  no fancy games with screen
  779.     buffers are played.
  780.  
  781.  
  782.     COM-AND disk I/O is done through the 'Handle' oriented I/O routines
  783.     added to DOS 2.0.  Therefore DOS 2.0 is a minimum requirement.
  784.  
  785.  
  786.     CACMP (Version 1.2) requires 110K for itself.  You need 256K
  787.     to take advantage of it.  COM-AND requires 384k to be useful.
  788.  
  789.  
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796.  
  797.  
  798.  
  799.  
  800.  
  801.  
  802.  
  803.  
  804.  
  805.  
  806.  
  807.  
  808.  
  809.  
  810.  
  811.  
  812.  
  813.  
  814.  
  815.  
  816.  
  817.  
  818.  
  819.  
  820.  
  821.  
  822.  
  823.  
  824. Version 1.2: 921012
  825.  
  826. COM-AND Script Utility                           Page  14
  827.  
  828.  
  829. VI.    Author information
  830.  
  831.  
  832.     CACMP was written using Microsoft Macro-Assembler.  The author
  833.     likes assembler.  Assembly language is an entirely appropriate
  834.     vehicle for some of the program, and a not-inappropriate vehicle
  835.     for the rest of it.  Everything, in moderation...
  836.  
  837.  
  838.     The author of this program is R. Scott McGinnis of Chicago, IL.
  839.     GEnie and Delphi id:  TARTAN.  CIS id:    73147,2665.  Comment and
  840.     suggestions (and criticism in moderation) are welcomed:
  841.  
  842.              CABER Software
  843.              R. (Scott) McGinnis
  844.              P.O. Box 3607 Mdse Mart
  845.              Chicago, IL 60654-0607
  846.  
  847.  
  848.     I thank my wife, Elizabeth, who put up with my obsessing while I
  849.     developed the parser on which CACMP is based.  The meta-language
  850.     specification of a language the size of COM-AND's is an obsessive
  851.     task - writing a compiler to compile the meta-language and a parser
  852.     to execute the compiler's output... the mind is a terrible thing to
  853.     lose.  Elizabeth refreshes this one every day.
  854.  
  855.  
  856.     This program may be distributed freely (but it isn't a whole lot of
  857.     use without COM-AND).  Any problems that are reported to the author
  858.     gets attention.
  859.  
  860.  
  861.     COM-AND is shareware.  If COM-AND is USED after a 30 day period
  862.     of evaluation, you MUST pay for it.  CACMP is included in the
  863.     license to use COM-AND.  [Please read REGISTER.DOC.]
  864.  
  865.  
  866.  
  867.  
  868.  
  869.  
  870.  
  871.  
  872.  
  873.  
  874.  
  875.  
  876.  
  877.  
  878.  
  879. Version 1.2: 921012
  880.